Use url_helpers to generate an RSS path

While I'm here, 1.8 hash syntax is converted to that of 1.9+.

Akinori MUSHA 9 years ago
parent
commit
3f74dec272
2 changed files with 17 additions and 9 deletions
  1. 16 8
      app/models/agents/data_output_agent.rb
  2. 1 1
      spec/models/agents/data_output_agent_spec.rb

+ 16 - 8
app/models/agents/data_output_agent.rb

@@ -92,6 +92,14 @@ module Agents
92 92
       interpolated['template']['link'].presence || "https://#{ENV['DOMAIN']}"
93 93
     end
94 94
 
95
+    def feed_url(options = {})
96
+      feed_link + Rails.application.routes.url_helpers.
97
+                  web_requests_path(agent_id: id || '<id>',
98
+                                    user_id: user_id,
99
+                                    secret: options[:secret],
100
+                                    format: options[:format])
101
+    end
102
+
95 103
     def feed_description
96 104
       interpolated['template']['description'].presence || "A feed of Events received by the '#{name}' Huginn Agent"
97 105
     end
@@ -100,7 +108,7 @@ module Agents
100 108
       if interpolated['secrets'].include?(params['secret'])
101 109
         items = received_events.order('id desc').limit(events_to_show).map do |event|
102 110
           interpolated = interpolate_options(options['template']['item'], event)
103
-          interpolated['guid'] = {'_attributes' => {'isPermaLink' => 'false'}, 
111
+          interpolated['guid'] = {'_attributes' => {'isPermaLink' => 'false'},
104 112
                                   '_contents' => interpolated['guid'].presence || event.id}
105 113
           date_string = interpolated['pubDate'].to_s
106 114
           date =
@@ -128,12 +136,12 @@ module Agents
128 136
             <?xml version="1.0" encoding="UTF-8" ?>
129 137
             <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
130 138
             <channel>
131
-             <atom:link href="#{feed_link.encode(:xml => :text)}/users/#{user.id}/web_requests/#{id || '<id>'}/#{params['secret']}.xml" rel="self" type="application/rss+xml" />
132
-             <title>#{feed_title.encode(:xml => :text)}</title>
133
-             <description>#{feed_description.encode(:xml => :text)}</description>
134
-             <link>#{feed_link.encode(:xml => :text)}</link>
135
-             <lastBuildDate>#{Time.now.rfc2822.to_s.encode(:xml => :text)}</lastBuildDate>
136
-             <pubDate>#{Time.now.rfc2822.to_s.encode(:xml => :text)}</pubDate>
139
+             <atom:link href=#{feed_url(secret: params['secret'], format: :xml).encode(xml: :attr)} rel="self" type="application/rss+xml" />
140
+             <title>#{feed_title.encode(xml: :text)}</title>
141
+             <description>#{feed_description.encode(xml: :text)}</description>
142
+             <link>#{feed_link.encode(xml: :text)}</link>
143
+             <lastBuildDate>#{Time.now.rfc2822.to_s.encode(xml: :text)}</lastBuildDate>
144
+             <pubDate>#{Time.now.rfc2822.to_s.encode(xml: :text)}</pubDate>
137 145
              <ttl>#{feed_ttl}</ttl>
138 146
 
139 147
           XML
@@ -149,7 +157,7 @@ module Agents
149 157
         end
150 158
       else
151 159
         if format =~ /json/
152
-          return [{ :error => "Not Authorized" }, 401]
160
+          return [{ error: "Not Authorized" }, 401]
153 161
         else
154 162
           return ["Not Authorized", 401]
155 163
         end

+ 1 - 1
spec/models/agents/data_output_agent_spec.rb

@@ -119,7 +119,7 @@ describe Agents::DataOutputAgent do
119 119
           <?xml version="1.0" encoding="UTF-8" ?>
120 120
           <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
121 121
           <channel>
122
-           <atom:linkhref="https://yoursite.com/users/#{agent.user.id}/web_requests/#{agent.id}/secret1.xml" rel="self" type="application/rss+xml"/>
122
+           <atom:link href="https://yoursite.com/users/#{agent.user.id}/web_requests/#{agent.id}/secret1.xml" rel="self" type="application/rss+xml"/>
123 123
            <title>XKCD comics as a feed</title>
124 124
            <description>This is a feed of recent XKCD comics, generated by Huginn</description>
125 125
            <link>https://yoursite.com</link>